package org.example.casemodule.service;


import com.mybatisflex.core.paginate.Page;
import org.example.casemodule.dto.*;
import org.example.casemodule.entity.LawyerEntity;
import com.mybatisflex.core.service.IService;
import org.example.casemodule.entity.LawyerPreferenceEntity;
import org.example.casemodule.entity.SpecialtyEntity;
import org.example.casemodule.vo.*;


import java.util.Date;
import java.util.List;

/**
 * 律师信息表 服务层。
 *
 * @author mybatis-flex-helper automatic generation
 * @since 1.0
 */
public interface ILawyerService extends IService<LawyerEntity> {

    /**
     * 律师资质审核
     * @param lawyerId 律师ID
     * @param status 审核状态
     * @param effectiveDate 生效日期
     * @return
     */
    LawyerAuditVO lawyerAudit(Long lawyerId, String status, Date effectiveDate);

    /**
     * 获取律师信息
     * @param lawyerId 律师ID
     * @return
     */
    LawyerInfoVO getLawyerInfo(Long lawyerId);

    /**
     * 案件分配
     * @param assignDTO
     * @return
     */
    AssignVO getAssign(AssignDTO assignDTO);
    /**
     * 律师状态更新
     * @param lawyerStatusDTO
     * @return
     */
    LawyerStatusVO updateStatus(LawyerStatusDTO lawyerStatusDTO);
    /**
     * 律师搜索
     * @param practiceAreas
     * @param minRating
     * @param maxWorkload
     * @param minSuccessRate
     * @param location
     * @return
     */
    LawyerSearchVO getLawyerSearch(List<String> practiceAreas, Double minRating, Integer maxWorkload, Double minSuccessRate, String location);

    /**
     * 律师绩效评估
     * @param period 时间周期
     * @param lawyerId 律师ID
     * @return
     */
    LawyerPerformanceVO getLawyerPerformance(Date period, List<Long> lawyerId);

    LawyerProfileVO getLawyerProfile();

    int updateLawyerProfile(LawyerProfileDTO lawyerProfileDTO);

    CertificatesVO getLawyerCertificates();

    int updateLawyerCertificates(CertificatesDTO certificatesDTO);

    int deleteLawyerCertificates(Long Id);

    List<SpecialtyEntity> getExpertise();

    int setExpertise(ExpertiseDTO expertiseDTO);

    Page<RatingVO> getLawyerRatings(Long page, Long size, String sort);

    List<LawyerPreferenceEntity> getLawyerPreference();

    int setLawyerPreference(LawyerPreferenceDTO lawyerPreferenceDTO);

    String getAuditStatus();

    ScheduleVO getSchedule();

}